﻿package com.teaphy.coroutinecrawler.callback

import kotlinx.coroutines.*

// 封装异步逻辑的结果回调
fun main() = runBlocking {

    launch {
        try {
            val value = executeAysnc {
                getData()
            }
            println("value: $value")
        } catch (e: java.lang.Exception) {
            println("testException: $e")
        }
    }

    println("runBlocking --> end")
}

// 获取数据
fun getData() : Int {
    println("currentThread：${Thread.currentThread().name}")
    // 模拟网络请求延迟
    Thread.sleep(2000)

    throw Exception("aaa")
    return 1000
}

// execute() 接受一个lambda表达式，可以把异步的逻辑传入.
// withContext(){} 使用调度器使得逻辑在IO线程执行，执行结果在被调用的线程返回
suspend fun <T> executeAysnc(block: () ->T): T{
    return withContext(Dispatchers.IO) {
        block()
    }
}